package com.pan.behavioral.iterator;

import com.pan.behavioral.iterator.itr.impl.MyArrList;
import com.pan.behavioral.iterator.itr.MyCollection;
import com.pan.behavioral.iterator.itr.MyIterator;
import com.pan.behavioral.iterator.itr.impl.MyLinkedList;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 迭代器模式的核心思想就是
 * 遍历集合的遍历过程与集合本身结构分离
 * 提供一种统一的方式来访问集合中的元素,而不必在意集合本身的结构如何（无论集合是数组、链表、哈希列表……）
 * 进而满足开闭原则。
 *
 */
public class IteratorApplication {


    public static void main(String[] args) {
        MyCollection<String> myList = new MyArrList<>();//new MyLinkedList<>();//
        myList.add("1");myList.add("2");
        myList.add("3");myList.add("4");
        myList.add("5");myList.add("6");

        MyIterator<String> iterator = myList.iterator();
        for (int i=0;iterator.hasNext();i++){
            if (i == 5) {
                iterator.remove();
            }
            else {
                System.out.println(iterator.next());
            }
        }
        System.out.println("//再次遍历");
        myList.add("1145");
        myList.iterator().forEachRemaining(System.out::println);
    }


    @Deprecated
    public static void test(){
        //集合本身，Array是数组结构
        List<String> list = new ArrayList<>();
        list.add("1");list.add("2");
        list.add("3");list.add("4");
        list.add("5");list.add("6");

        //迭代器遍历
        Iterator<String> iterator = list.iterator();
        for (int i=0;iterator.hasNext();i++){
            String next = iterator.next();
            System.out.println(next);
            if (i==2){
                iterator.remove();
            }
        }
    }
}
